#ifndef DATA_OPS_H
#define DATA_OPS_H

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"structs.h"

// 统一数据目录路径
#define DATA_DIR "/home/yangchun/pingpong_system/pingpong_member"
// 统一数据文件路径
#define MEMBER_FILE DATA_DIR "/members.dat"
#define ADMIN_FILE DATA_DIR "/admins.dat"
#define RECORD_FILE DATA_DIR "/records.dat"
// 初始化数据目录
void init_data_dir();

// 获取当前时间（format=0：详细时间；format=1：仅日期）
void get_current_time(char *time_str, int format);

// 添加会员（返回0成功，-1失败）
int add_member(Member *member);

// 按卡号注销会员
int deactivate_member_by_card_id(const char *card_id);

// 更新会员信息（返回0成功，-1未找到）
int update_member(Member *member);

// 按卡号查找会员（返回会员指针，NULL表示未找到）
Member* find_member_by_card_id(const char *card_id);

// 按姓名查找会员（返回会员数组，count存储数量，需手动释放）
Member* find_member_by_name(const char *name, int *count);

// 按手机号查找会员（返回会员指针，NULL表示未找到）
Member* find_member_by_phone(const char *phone);

// 获取所有会员（返回会员数组，count存储数量，需手动释放）
Member* get_all_members(int *count);

// 管理员登录验证（返回1成功，0失败）
int admin_login(const char *username, const char *password);

// 添加管理员（返回0成功，-1失败）
int add_admin(const char *username, const char *password);

// 添加入场/离场记录（is_entry=1入场，0离场；返回0成功，-1失败）
int add_record(const char *card_id, int is_entry);

// 按卡号获取所有记录（返回记录数组，count存储数量，需手动释放）
Record* get_records_by_card_id(const char *card_id, int *count);

// 获取所有记录（返回记录数组，count存储数量，需手动释放）
Record* get_all_records(int *count);

// 将会员类型枚举转换为字符串
const char* card_type_to_string(CardType type);

// 将字符串转换为会员类型枚举
CardType string_to_card_type(const char* str);

#endif
